解析器
1. 解析器的说明
- 根据 Content-Type 类型对发送过来的数据进行解析
- 可以通过编写中间件的方式实现解析器的功能
- rest_framework 提供了4个解析器:
- JSONParser -> Content-Type = application/json
- FormParser -> Content-Type = application/x-www-form-urlencoded
- MultiPartParser -> Content-Type = multipart/form-data
- FileUploadParser -> Content-Type = */*
- 在使用 rest_framework 的时候所有视图类默认支持 JSONParser、FormParser、MultiPartParser 解析器
2. 局部解析器
- 局部解析器的配置(即: parser_classes = [解析器, 解析器])会覆盖掉该视图类在全局解析器中的配置
- parser_classes = [解析器, 解析器]
- 注意: 在日常开发中尽量不要去配置局部解析器和全局解析器,因为 rest_framework 默认所设置的3个解析器已经够用了
# views.py
from rest_framework import viewsets
from rest_framework.parsers import JSONParser, FormParser # 导入解析器
class BookViewSet(viewsets.ModelViewSet):
parser_classes = [JSONParser] # 该视图类只使用 JSONParser 解析器
queryset = Book.objects.all()
serializer_class = BookSerializers
3. 全局解析器
- 全局解析器的设置作用于所有视图类
- 可以通过设置局部解析器来覆盖全局解析器的设置
# settings.py
REST_FRAMEWORK = {
# "DEFAULT_AUTHENTICATION_CLASSES": ["app01.rf_auth.TokenAuth"], # 全局认证
# "DEFAULT_PERMISSION_CLASSES": ["app01.rf_permission.SVIPPermission"] # 全局权限
'DEFAULT_PARSER_CLASSES': ['rest_framework.parsers.JSONParser'] # 全局解析器
}